package com.zhaopin.theswordreferstooffer;

import java.util.Objects;

/**
 * @author yin.peide
 * @date 2021-06-09 19:33
 * 面试题16： 反转链表
 */
public class Offer16 {


    public static void main(String[] args) {
        LinkedNode16 l5 = new LinkedNode16(5);
        LinkedNode16 l4 = new LinkedNode16(4);
        LinkedNode16 l3 = new LinkedNode16(3);
        LinkedNode16 l2 = new LinkedNode16(2);
        LinkedNode16 l1 = new LinkedNode16(1);
        l1.next = l2;
        l2.next = l3;
        l3.next = l4;
        l4.next = l5;

        reverseLinked(l1);
    }

    public static LinkedNode16 reverseLinked(LinkedNode16 head) {
        if (Objects.isNull(head)) {
            return null;
        }

        LinkedNode16 newLink = null;
        while (Objects.nonNull(head)) {
            //第一步： 获取头节点的下一个缓存起来
            LinkedNode16 temp = head.next;

            //第二步：头结点的下一个指向新的链表
            head.next = newLink;

            //第三步: 新的新链表的头为head
            newLink = head;

            //第四步：新的旧链表的头为next
            head = temp;

        }

        return newLink;

    }
}


class LinkedNode16 {
    int value;
    LinkedNode16 next;

    public LinkedNode16(int value) {
        this.value = value;
    }
}
